package com.admgt.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

public class FTPClientUtil {
	public static boolean downFile(String ip, int port,String username, String password, String remotePath,String fileName,String localPath) {   
	     boolean success = false;   
	     FTPClient ftp = new FTPClient();   
	     try {   
	         int reply;   
	         ftp.connect(ip, port);
	         //下面三行代码必须要，而且不能改变编码格式，否则不能正确下载中文文件
	         ftp.setControlEncoding("GBK");
	         FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);   
	         conf.setServerLanguageCode("zh"); 
	        
	         //如果采用默认端口，可以使用ftp.connect(url)的方式直接连接FTP服务器   
	         ftp.login(username, password);//登录   
	         reply = ftp.getReplyCode();   
	         if (!FTPReply.isPositiveCompletion(reply)) {   
	             ftp.disconnect();   
	             return success;   
	         }   
	         
	         
	         ftp.changeWorkingDirectory(remotePath);//转移到FTP服务器目录   
	         FTPFile[] fs = ftp.listFiles();   
	         
	         for(int i = 0; i < fs.length; i++){ 
	         FTPFile ff = fs[i];
	             if(ff.getName().equals(fileName)){   
	             
	                 File localFile = new File(localPath+File.separator+ff.getName());   
//	                    
	                 OutputStream is = new FileOutputStream(localFile);   
	                 
	                 //注意此处retrieveFile的第一个参数由GBK转为ISO-8859-1编码。否则下载后的文件内容为空。
	                 //原因可能是由于aix系统默认的编码为ISO-8859-1
	                 ftp.retrieveFile(new String(ff.getName().getBytes("GBK"),"ISO-8859-1"), is);   
	                 is.close();   
	             }   
	         }   
	            
	         ftp.logout();   
	         success = true;   
	     } catch (IOException e) {   
	         e.printStackTrace();   
	     } finally {   
	         if (ftp.isConnected()) {   
	             try {   
	                 ftp.disconnect();   
	             } catch (IOException ioe) {   
	             }   
	         }   
	     }   
	     return success;   
	}
	public static void main(String[] args) {
		
	}

}
